The t N (calc-now)
[now] command pushes the current date and time on
the stack as a date form. The time is reported in terms of the
specified time zone; with no numeric prefix argument, t
N reports for the current time zone.
The t P
(calc-date-part) command extracts one part of a date
form. The prefix argument specifies the part; with no argument,
this command prompts for a part code from 1 to 9. The various
part codes are described in the following paragraphs.
The M-1
t P [year] function extracts the year number
from a date form as an integer, e.g., 1991. This and the
following functions will also accept a real number for an
argument, which is interpreted as a standard Calc day number.
Note that this function will never return zero, since the year 1
BC immediately precedes the year 1 AD.
The
M-2 t P [month] function extracts the
month number from a date form as an integer in the range 1 to
12.
The M-3 t
P [day] function extracts the day number from
a date form as an integer in the range 1 to 31.
The M-4
t P [hour] function extracts the hour from a
date form as an integer in the range 0 (midnight) to 23. Note
that 24-hour time is always used. This returns zero for a pure
date form. This function (and the following two) also accept HMS
forms as input.
The
M-5 t P [minute] function extracts the
minute from a date form as an integer in the range 0 to 59.
The
M-6 t P [second] function extracts the
second from a date form. If the current precision is 12 or less,
the result is an integer in the range 0 to 59. For higher
precisions, the result may instead be a floating-point
number.
The
M-7 t P [weekday] function extracts the
weekday number from a date form as an integer in the range 0
(Sunday) to 6 (Saturday).
The
M-8 t P [yearday] function extracts the
day-of-year number from a date form as an integer in the range 1
(January 1) to 366 (December 31 of a leap year).
The M-9
t P [time] function extracts the time portion
of a date form as an HMS form. This returns
‘0@ 0' 0"’ for
a pure date form.
The t
M (calc-new-month) [newmonth]
command computes a new date form that represents the first day of
the month specified by the input date. The result is always a
pure date form; only the year and month numbers of the input are
retained. With a numeric prefix argument n in the
range from 1 to 31, t M computes the nth
day of the month. (If n is greater than the actual
number of days in the month, or if n is zero, the last
day of the month is used.)
The t Y
(calc-new-year) [newyear] command
computes a new pure date form that represents the first day of
the year specified by the input. The month, day, and time of the
input date form are lost. With a numeric prefix argument
n in the range from 1 to 366, t Y computes
the nth day of the year (366 is treated as 365 in
non-leap years). A prefix argument of 0 computes the last day of
the year (December 31). A negative prefix argument from -1
to -12 computes the first day of the nth month
of the year.
The t W
(calc-new-week) [newweek] command
computes a new pure date form that represents the Sunday on or
before the input date. With a numeric prefix argument, it can be
made to use any day of the week as the starting day; the argument
must be in the range from 0 (Sunday) to 6 (Saturday). This
function always subtracts between 0 and 6 days from the input
date.
Here's an example use of newweek: Find the date
of the next Wednesday after a given date. Using M-3 t
W or ‘newweek(d,
3)’ will give you the preceding
Wednesday, so ‘newweek(d+7,
3)’ will give you the following Wednesday. A
further look at the definition of newweek shows that
if the input date is itself a Wednesday, this formula will return
the Wednesday one week in the future. An exercise for the reader
is to modify this formula to yield the same day if the input is
already a Wednesday. Another interesting exercise is to preserve
the time-of-day portion of the input (newweek resets
the time to midnight; hint: how can newweek be
defined in terms of the weekday function?).
The
‘pwday(date)’ function (not on any key) computes
the day-of-month number of the Sunday on or before
date. With two arguments, ‘pwday(date,
day)’ computes
the day number of the Sunday on or before day number
day of the month specified by date. The
day must be in the range from 7 to 31; if the day
number is greater than the actual number of days in the month,
the true number of days is used instead. Thus
‘pwday(date,
7)’ finds the first Sunday of the month, and
‘pwday(date,
31)’ finds the last Sunday of the month. With
a third weekday argument, pwday can be
made to look for any day of the week instead of Sunday.
The t
I (calc-inc-month) [incmonth]
command increases a date form by one month, or by an arbitrary
number of months specified by a numeric prefix argument. The time
portion, if any, of the date form stays the same. The day also
stays the same, except that if the new month has fewer days the
day number may be reduced to lie in the valid range. For example,
‘incmonth(<Jan 31,
1991>)’ produces ‘<Feb 28, 1991>’. Because of
this, t I t I and M-2 t I do not always
give the same results (‘<Mar
28, 1991>’ versus
‘<Mar 31,
1991>’ in this case).
The ‘incyear(date, step)’ function increases a date form by the specified number of years, which may be any positive or negative integer. Note that ‘incyear(d, n)’ is equivalent to ‘incmonth(d, 12*n)’, but these do not have simple equivalents in terms of day arithmetic because months and years have varying lengths. If the step argument is omitted, 1 year is assumed. There is no keyboard command for this function; use C-u 12 t I instead.
There is no newday function at all because
F [floor] serves this purpose. Similarly,
instead of incday and incweek simply
use ‘d + n’ or
‘d + 7 n’.
See Basic
Arithmetic, for the f ] [incr]
command which can adjust a date/time form by a certain number of
seconds.